Java 使用for循环查找两个字符串中的常用字母
我试图通过使用for循环找到两个字符串中的公共字符。下面的代码工作正常,如果我提供两个完全不同的字符串,例如:one和two,但是如果我提供两个输入相同的字符串,例如:teen和teen,则无法按预期工作Java 使用for循环查找两个字符串中的常用字母,java,Java,我试图通过使用for循环找到两个字符串中的公共字符。下面的代码工作正常,如果我提供两个完全不同的字符串,例如:one和two,但是如果我提供两个输入相同的字符串,例如:teen和teen,则无法按预期工作 import java.util.Scanner; public class CommonAlphabets { public static void main(String[] args) { try(Scanner input = new Scanner(Sys
import java.util.Scanner;
public class CommonAlphabets {
public static void main(String[] args) {
try(Scanner input = new Scanner(System.in)){
System.out.println("Enter String one ");
String stringOne = input.nextLine();
System.out.println("Enter String two ");
String StringTwo = input.nextLine();
StringBuffer sb = new StringBuffer();
for(int i=0;i<stringOne.length();i++){
for(int j=0;j<StringTwo.length();j++){
if(stringOne.charAt(i)== StringTwo.charAt(j)){
sb.append(stringOne.charAt(i));
}
}
}
System.out.println("Common characters are " +sb.toString());
}
}
}
import java.util.Scanner;
公共类公共字母表{
公共静态void main(字符串[]args){
try(扫描仪输入=新扫描仪(System.in)){
System.out.println(“输入字符串1”);
字符串stringOne=input.nextLine();
System.out.println(“输入字符串2”);
字符串StringTwo=input.nextLine();
StringBuffer sb=新的StringBuffer();
for(int i=0;i您不需要内部for循环,而是使用contains
String stringOne = "one";
String stringTwo = "one";
StringBuilder sb = new StringBuilder();
for(int i=0;i<stringOne.length() && i < stringTwo.length ();i++){
if(stringOne.contains(String.valueOf(stringTwo.charAt(i))) &&
!sb.toString().contains(String.valueOf(stringTwo.charAt(i)))){
// check already added
sb.append(stringTwo.charAt(i));
}
}
System.out.println (sb.toString());
你可以使用Set
Set<Character> set = new HashSet<>();
for(int i = 0; i<stringOne.length(); i++) {
for(int j = 0; j < StringTwo.length(); j++) {
if(stringOne.charAt(i) == StringTwo.charAt(j)){
set.add(stringOne.charAt(i));
}
}
}
StringBuilder sb = new StringBuilder();
for (Character c : set) {
sb.append(c);
}
System.out.println("Common characters are " + sb);
Set Set=newhashset();
对于(int i=0;i这是最好的方法,因为它的时间复杂度是n
,所以这是最好的方法
import java.util.Scanner;
public class CommonAlphabets
{
public static void main(String[] args)
{
try (Scanner input = new Scanner(System.in))
{
System.out.println("Enter String one ");
String stringOne = input.nextLine();
System.out.println("Enter String two ");
String StringTwo = input.nextLine();
StringBuffer sb = new StringBuffer();
/**
* Assuming char as index of array where A-Z is from index 0 to 25 and a-z is index 26-51
*/
int[] alphabetArray1 = new int[52];
for(int i = 0, len = stringOne.length(); i < len; i++)
alphabetArray1[stringOne.charAt(i) > 94 ? stringOne.charAt(i) - 71 : stringOne.charAt(i) - 65] = 1;
int[] alphabetArray2 = new int[52];
for(int i = 0, len = StringTwo.length(); i < len; i++)
alphabetArray2[StringTwo.charAt(i) > 94 ? StringTwo.charAt(i) - 71 : StringTwo.charAt(i) - 65] = 1;
// System.out.println(Arrays.toString(alphabetArray1));
// System.out.println(Arrays.toString(alphabetArray2));
for (int i = 0; i < 52; i++)
if (alphabetArray1[i] == 1 && alphabetArray2[i] == 1)
sb.append((char) (i < 26 ? i + 65 : i + 71));
System.out.println("Common characters are " + sb.toString());
}
}
}
import java.util.Scanner;
公共类公共字母表
{
公共静态void main(字符串[]args)
{
try(扫描仪输入=新扫描仪(System.in))
{
System.out.println(“输入字符串1”);
字符串stringOne=input.nextLine();
System.out.println(“输入字符串2”);
字符串StringTwo=input.nextLine();
StringBuffer sb=新的StringBuffer();
/**
*假设char作为数组的索引,其中A-Z是从索引0到25,A-Z是索引26-51
*/
int[]alphabetArray1=新int[52];
for(int i=0,len=stringOne.length();i94?stringOne.charAt(i)-71:stringOne.charAt(i)-65]=1;
int[]alphabetArray2=新int[52];
for(int i=0,len=StringTwo.length();i94?StringTwo.charAt(i)-71:StringTwo.charAt(i)-65]=1;
//System.out.println(Arrays.toString(alphabetArray1));
//System.out.println(Arrays.toString(alphabetArray2));
对于(int i=0;i<52;i++)
if(alphabetArray1[i]==1&&alphabetArray2[i]==1)
附加((字符)(i<26?i+65:i+71));
System.out.println(“常用字符为“+sb.toString());
}
}
}
您的方法很好,因为结果显示了您期望的结果,因此代码很好,但您需要停止复制,因此您必须为'sb'变量编写代码,以便它删除重复项,或在循环中编写代码,以便它不会提供重复项。
由于您的代码阅读起来越来越复杂,所以我更希望您创建一个方法来编写代码,以删除重复的代码
static void removeDuplicate(StringBuilder s){
for(int i=0,i<s.length-1,i++){
for(int j=i+1,j<s.length,j++){
if(s.charAt(i)==s.charAt(j)){
s.deleteCharAt(j);
}
}
}
static void removeDuplicate(StringBuilder s){
对于(inti=0,i您可以尝试的另一种方法是-组合两个输入字符串,迭代连接的字符串并返回两个字符串中存在的字符
使用集合
将确保不会添加由于字符串串联而重复的字符
这是我写的-
import java.util.HashSet;
public class HelloWorld {
private static Character[] findCommonLetters(String combined, String w1, String w2) {
HashSet<Character> hash = new HashSet<>();
for(char c: combined.toCharArray()) {
if(w1.indexOf(c) != -1 && w2.indexOf(c) != -1) {
hash.add(c);
}
}
return hash.toArray(new Character[hash.size()]);
}
public static void main(String []args){
// System.out.println("Hello World");
String first = "flour";
String second = "four";
String combined = first.concat(second);
Character[] result = findCommonLetters(combined, first, second);
for(char c: result) {
System.out.print(c);
}
System.out.println();
}
}
import java.util.HashSet;
公共类HelloWorld{
私有静态字符[]findCommonLetters(组合字符串、字符串w1、字符串w2){
HashSet hash=新HashSet();
for(char c:combined.toCharArray()){
如果(w1.indexOf(c)!=1和&w2.indexOf(c)!=1){
添加(c);
}
}
返回hash.toArray(新字符[hash.size()]);
}
公共静态void main(字符串[]args){
//System.out.println(“你好世界”);
先字符串=“面粉”;
字符串second=“四”;
组合字符串=第一个.concat(第二个);
字符[]结果=findCommonLetters(组合、第一个、第二个);
for(字符c:结果){
系统输出打印(c);
}
System.out.println();
}
}
演示。定义“工作正常”。定义“未按预期工作”。所有情况下的预期输出是什么?正常工作意味着输入的公共字符,例如1和2显示为o,而输入teen和teen显示为Teeen。@gowthamjs23考虑重复字符以及解析字符串的方式。请尝试调试:)对于StringOne=teen&String2=teen,输出应该是10?或teen?@Downvoter,请始终说明您为什么对某人的评论/问题/答案进行了否决。对不起,请比较您的代码和我的代码的时间复杂度。我的代码是n
,而您的代码是n^2
字符串是teen和teen
,因为这样的可读性肯定更好erNo,亲爱的,对于长期运行和可伸缩性来说,复杂性是第一位的。哈哈,你的代码太复杂了,以至于很难注意到其中的错误。不,亲爱的,这只是我使用的一个公式。如果你知道这个公式,它一点也不复杂。
import java.util.HashSet;
public class HelloWorld {
private static Character[] findCommonLetters(String combined, String w1, String w2) {
HashSet<Character> hash = new HashSet<>();
for(char c: combined.toCharArray()) {
if(w1.indexOf(c) != -1 && w2.indexOf(c) != -1) {
hash.add(c);
}
}
return hash.toArray(new Character[hash.size()]);
}
public static void main(String []args){
// System.out.println("Hello World");
String first = "flour";
String second = "four";
String combined = first.concat(second);
Character[] result = findCommonLetters(combined, first, second);
for(char c: result) {
System.out.print(c);
}
System.out.println();
}
}