【问题标题】:Rotating a String with StringBuilder instead of a character array使用 StringBuilder 而不是字符数组旋转字符串
【发布时间】:2022-01-25 19:02:01
【问题描述】:

旨在通过旋转直到匹配来检查一个字符串是否是另一个字符串的旋转。

尝试使用 StringBuilder 来旋转所述 String 而不是 char[ ],因为它更有效,但我无法确定为什么 String 只旋转一次,而不是 a.length()-1 次。

public static void main(String[] args) {
    
    String a = "erbottlewat";
    String b = "waterbottle";
    
    System.out.println(isSubstring(a,b));
    
}


    public static boolean isSubstring(String a, String b) {
    
    StringBuilder strbdr = new StringBuilder(a); // can pick either string. if one ends up matching the other one, we know it is a rotation
    
    for(int i = 0; i < a.length()-1; i++) { // this is the number of times the program will run
        
        char temp = a.charAt(0);
        
        for(int j = 0; j < a.length()-1; j++) {
            strbdr.setCharAt(j, a.charAt(j+1)); // tried to use a stringbuilder because i read it was the most efficient way.
        }
        
        strbdr.setCharAt(a.length()-1, temp);
        
        System.out.println(strbdr.toString());
        
        if(strbdr.toString().equals(b)) {
            return true;
        }
    }
    return false;
    
}

}

【问题讨论】:

  • 我用 char[] 重新解决了这个问题,它有更多的内部循环,我相信这会将复杂性增加到 O(n^3),但我会在问题下方添加蛮力解决方案!此外,您能否通过 a.charAt() 不使用 StringBuilder 来扩展您的意思?
  • 知道了!我只需要在每次更改后通过将 String a 设置为 StringBuilder 来存储更改! for(int j = 0; j
  • @user16320675 完成!发布更新的解决方案。

标签: java string rotation stringbuilder


【解决方案1】:

我的错误是用 StringBuilder 索引 String a(它从未改变)来替换元素。通过将strbdr.setCharAt(j, a.charAt(j+1)); 替换为strbdr.setCharAt(j, strbdr.charAt(j+1));,我能够保存更改并正确旋转字符串。

解决方案:

public static void main(String[] args) {
    
    String a = "erbottlewat";
    String b = "waterbottle";
    
    System.out.println(isSubstring(a,b));
    
}

public static boolean isSubstring(String a, String b) {
    
    StringBuilder strbdr = new StringBuilder(a);
    
    for(int i = 0; i < a.length()-1; i++) {
        
        char temp = strbdr.charAt(0);
        
        for(int j = 0; j < a.length()-1; j++) {
            strbdr.setCharAt(j, strbdr.charAt(j+1));
        }
        
        strbdr.setCharAt(a.length()-1, temp);
        
        System.out.println(strbdr.toString());
        
        if(strbdr.toString().equals(b)) {
            return true;
        }
    }
    return false;
    
}

【讨论】:

    猜你喜欢
    • 2013-09-19
    • 1970-01-01
    • 2014-11-06
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 2014-04-15
    相关资源
    最近更新 更多